package com.thinkTank.oa.util;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.github.pagehelper.StringUtil;
import com.thinkTank.oa.common.Constant;
import com.thinkTank.oa.entity.Project;

public class StrUtil {
	
	private final static String DEFAULT_TIME_PATTERN = "MM/dd/yyyy";
	
	private final static String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
	
	public static String getCurrentDateTime_two(){
		return getCurrentDateTime(DEFAULT_DATETIME_PATTERN);
	}
	
	/**
	 * 格式化当前时间
	 * @date 2018-08-14
	 * @author dq
	 * @return 返回 给定格式的日期
	 */
	public static String getCurrentDateTime() {
		return getCurrentDateTime(DEFAULT_TIME_PATTERN);
	}

	public static String getCurrentDateTime(String pattern) {
		java.text.SimpleDateFormat sd = new java.text.SimpleDateFormat(pattern);
		return sd.format(new java.util.Date());
	}
	public static String getUUID32(){
	    String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
	    return uuid;
	}

	/***
	 * 领域 选中项目的字节转换
	 * @param length
	 * @param str 页面传过来的已逗号分隔的复选框ID
	 * @author dq
	 * @date 2018-08-08
	 * @return 以一定的规则转换成一个十进制数字用来保存在数据库
	 */
	public static Integer stringByByte(String str){
		
		String bytes="";
		for(int i=0;i<Constant.BYTE_LENGTH;i++){
	
			bytes="0"+bytes;
		}
		 StringBuilder sb = new StringBuilder(bytes);
		 String index[]=str.split(",");
		 for(int k=0;k<index.length;k++){
			 Integer ind = Integer.parseInt(index[k]);
			
				 sb.replace(ind-1, ind, "1");
		 }
		 Integer temp =Integer.parseInt(sb.reverse().toString(),2);//2进制转10进制
		 return temp;
	}
	/***
	 * @author dq
	 * @date 2018-08-15
	 * @param bytes 从数据库中查出来的十进制数据
	 * @return 转换成以逗号分隔的复选框id
	 */
	public static String byteToString(String bytes){
		
		bytes =Integer.toString(Integer.valueOf(bytes), 2);//10进制转2进制
		StringBuilder sb = new StringBuilder(bytes);
		sb= sb.reverse();
		String tempStr ="";
		for(int i=0;i<bytes.length();i++){
			
			char k = sb.charAt(i);
			if(k=='1'){
				tempStr=tempStr+(i+1)+",";
			}
		}
		return tempStr.substring(0,tempStr.length()-1);
	}
	public static void main(String[] args) {
		System.out.println(stringByByte("3"));
		System.out.println(byteToString("4"));
		Project pro = new Project();
		pro.setPid("fas");
        System.out.println(isEmpty(pro));
	}
	/**
     * @author：qd
     * @date：2018-08-21
     * @Description: 获取当前request
     * @return
     * @throws IllegalStateException 当前线程不是web请求抛出此异常.
     */
	public static HttpServletRequest getCurrentRequest() throws IllegalStateException {
        ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attrs == null) {
            throw new IllegalStateException("当前线程中不存在 Request 上下文");
        }
        return attrs.getRequest();
    }
	
	/**
	 * 判断一个对象是否是空对象，即所有属性都没有值
	 * static和final属性不判断
	 * @author pdz
	 * @date 2018年9月6日
	 * @param t
	 * @return
	 */
	public static <T> boolean isEmpty(T t) {
	    try {
            Field[] fieldArr = t.getClass().getDeclaredFields();
            for (Field field : fieldArr) {
                int mod = field.getModifiers();
                if (Modifier.isStatic(mod) || Modifier.isFinal(mod))
                    continue;
                field.setAccessible(true);
                Object value = field.get(t);
                Class<?> type = field.getType();
                boolean notEmpty = type.equals(String.class) ? StringUtil.isNotEmpty((String) value) : value != null;
                if (notEmpty)
                    return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 
	    return true;
	}
	
	/**
	 * 如果是null就返回空字符串
	 * @author pdz
	 * @date 2018年11月16日
	 * @param str
	 * @return
	 */
	public static String ifNullToEmpty(String str) {
		return str == null ? "" : str;
	}
}
